﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SIIV.Data;

namespace SIIV.View.Web.Controllers
{
    public class ConsultasController : BaseController
    {
        [Authorize(Roles = "Veterinario")]
        [ActionName("Recomendaciones")]
        public ActionResult ObtenerRecomendaciones()
        {
            try
            {
                return View(Notificaciones.ObtenerRecomendaciones());
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [Authorize(Roles = "Veterinario")]
        [ActionName("Analisis")]
        public ActionResult ObtenerAnalisis(int? idAnimalSeleccionado = null)
        {
            try
            {
                ViewBag.Animales = new SelectList(Animales.ObtenerAnimales(VeterinarioLogueado.IdUsuario, string.Empty, new Nullable<decimal>(), new Nullable<decimal>(), new Nullable<char>(), new Nullable<short>()), "IdAnimal", "Nombre");

                if (AjaxRequestExtensions.IsAjaxRequest(Request))
                {
                    if (idAnimalSeleccionado.HasValue)
                    {
                        return PartialView("AnalisisGrid", Muestras.ObtenerAnalisis(VeterinarioLogueado.IdUsuario, idAnimalSeleccionado.Value != 0 ? idAnimalSeleccionado : new Nullable<int>()));
                    }
                    else
                    {
                        return View(Muestras.ObtenerAnalisis(VeterinarioLogueado.IdUsuario, new Nullable<int>()));
                    }
                }
                else
                {
                    return View(Muestras.ObtenerAnalisis(VeterinarioLogueado.IdUsuario, idAnimalSeleccionado));
                }
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [Authorize(Roles = "Veterinario")]
        [ActionName("Proyeccion")]
        public ActionResult ObtenerProyeccionEnfermedadesFuturas()
        {
            return View();
            try
            {
                int idAnimal = 0; DateTime fechaInicial; DateTime fechaFinal;
                //return View(Muestras.ObtenerProyeccionEnfermedadesFuturas(idAnimal, fechaInicial, fechaFinal));
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [Authorize(Roles = "Veterinario")]
        [ActionName("Notificaciones")]
        public ActionResult ObtenerNotificaciones()
        {
            try
            {
                if (AjaxRequestExtensions.IsAjaxRequest(Request))
                {
                    return PartialView("NotificacionesGrid", Notificaciones.ObtenerNotificaciones(VeterinarioLogueado.IdUsuario));
                }
                else
                {
                    return View(Notificaciones.ObtenerNotificaciones(VeterinarioLogueado.IdUsuario));
                }
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult MarcarNotificacionComoLeida(int idNotificacion)
        {
            try
            {
                Notificaciones.MarcarNotificacionComoLeida(idNotificacion);
                return Json("Notificación actualizada.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        public ActionResult GenerarNotificaciones()
        {
            try
            {
                Notificaciones.GenerarNotificaciones(VeterinarioLogueado.IdUsuario);
                return Json("Notificaciones generadas exitosamente.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [ActionName("Proyeccion")]
        [HttpGet]
        public ActionResult ProyeccionEnfermedades()
        {
            ViewBag.Animales = new SelectList(Animales.ObtenerAnimales(VeterinarioLogueado.IdUsuario, string.Empty, new Nullable<decimal>(), new Nullable<decimal>(), new Nullable<char>(), new Nullable<short>()), "IdAnimal", "Nombre");
            return View();
        }

        [ActionName("Proyeccion")]
        [HttpPost]
        public ActionResult ProyeccionEnfermedades(int idAnimal, DateTime fechaInicio, DateTime fechaFin)
        {
            try
            {
                return PartialView("ProyeccionGrid", Notificaciones.ProyeccionEnfermedades(idAnimal, fechaInicio, fechaFin));
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [ActionName("ResultadosAnalisis")]
        public ActionResult ObtenerResultadosAnalisis(int idAnalisis)
        {
            try
            {
                Dictionary<string, string> resultado = new Dictionary<string,string>();
                foreach (ResultadoDeAnalisis r in Muestras.ObtenerResultadosAnalisis(idAnalisis))
                { 
                    resultado.Add(r.IdResultadoDeAnalisis.ToString(), string.Format("<strong>{0}</strong><br/>{1} ({2})", r.Indicador.Nombre, r.Valor, r.Unidade.Anotacion));
                }
                return Json(resultado, JsonRequestBehavior.AllowGet) ;
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }
    }
}
